docker0网桥异常
异常现象
# #flanneld-start[1853]: I0321 16:55:46.027824 1853 network.go:243] L3 miss but route for 172.30.41.2 not found
异常原因
根据分析产生异常原因是flanneld node的网段在etcd 中没有配置好,当与别的node交互时查询目标node ip时失败,因为etcd中没有保存节点子网ip段信息,或者是保存ip段信息是错误的,可以手动添加ip段,ip段 指的是Flannel 网卡的IP地址
查看docker的Flannel配置是否生效
systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Drop-In: /usr/lib/systemd/system/docker.service.d
└─flannel.conf
Active: active (running) since 三 2018-04-25 13:19:52 CST; 12min ago
Docs: https://docs.docker.com
Main PID: 24187 (dockerd)
Memory: 85.4M
CGroup: /system.slice/docker.service
├─24187 /usr/bin/dockerd --exec-opt native.cgroupdriver=systemd --bip=172.30.17.1/24 --ip-masq=true --mtu=1450 -s=overlay2 --log-driver=json-file
查看flannel进程状态
systemctl status flanneld -l确认没有错误信息,如果存在 异常现象 信息时就查看ectd中的subnet数据,因为podip跨主机与容器通信时会先去etcd中查找到对的IP段,再查找到flannel的网卡mac地址和IP地址
etcd中查看子网信息
etcdctl --endpoints=https://x.x.x.x:2379,https://x.x.x.x:2379 \
> --ca-file=/etc/kubernetes/ssl/ca.pem \
> --cert-file=/etc/kubernetes/ssl/kubernetes.pem \
> --key-file=/etc/kubernetes/ssl/kubernetes-key.pem \
> ls /kube-centos/network/subnets
subnets信息如下:
/kube-centos/network/subnets/172.30.17.0-24
/kube-centos/network/subnets/172.30.69.0-24
/kube-centos/network/subnets/172.30.95.0-24
etcd查看节点信息
etcdctl --endpoints=https://x.x.x.x:2379,https://x.x.x.x:2379 \
> --ca-file=/etc/kubernetes/ssl/ca.pem --cert-file=/etc/kubernetes/ssl/kubernetes.pem \
> --key-file=/etc/kubernetes/ssl/kubernetes-key.pem \
> get /kube-centos/network/subnets/172.30.41.0-24
节点信息:
{"PublicIP":"x.x.x.x","BackendType":"vxlan","BackendData":{"VtepMAC":"36:f8:86:0e:bf:d1"}}
publicip是Flannel指定网卡地址<资源配置实践-Flannel指定网卡通信>目录中有说明
backendData是flannel.1的mac地址
etcd配置节点信息
etcdctl --endpoints=https://x.x.x.x:2379,https://x.x.x.x:2379 --ca-file=/etc/kubernetes/ssl/ca.pem --cert-file=/etc/kubernetes/ssl/kubernetes.pem --key-file=/etc/kubernetes/ssl/kubernetes-key.pem set /kube-centos/network/subnets/172.30.17.0-24 '{"PublicIP":"10.27.70.6","BackendType":"vxlan","BackendData":{"VtepMAC":"b2:34:47:0b:b3:0a"}}'
# 把所需节点的subnet配置完后把旧的subnet记录删除
etcdctl --endpoints=https://x.x.x.x:2379,https://x.x.x.x:2379 --ca-file=/etc/kubernetes/ssl/ca.pem --cert-file=/etc/kubernetes/ssl/kubernetes.pem --key-file=/etc/kubernetes/ssl/kubernetes-key.pem rm /kube-centos/network/subnets/172.30.64.0-24
重启Flannel
systemctl restart flanneld
systemctl status flanneld
解决方案
自己手动添加subnets信息,或者指docker的子网网段信息(BIP,IPMASQ,MTU)等信息指定就OK